/*
 * FileName:    AbstractSpringCommonService.java
 * Description: ICommonServiceのSpring実現
 * History:     2010-8-25 (廖宝俊) 1.0 Create
 */
package com.sn.system.common.service.spring;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.sn.system.common.command.Page;
import com.sn.system.common.dao.ICommonDao;
import com.sn.system.common.service.ICommonService;


public abstract class AbstractSpringCommonService implements ICommonService {
	 /**
     * @return  ICommonDao実例
     */
    protected abstract ICommonDao getCommonDao();

    /**
     * 対象を新たに増加する
     * @param entity   増加された対象
     */
    public boolean insert(Object entity) {
    	try {
    		this.getCommonDao().insert(entity);
    		return true;
		} catch (RuntimeException e) {
			e.printStackTrace();
			return false;
		}
        
    }

    /**
	 * 更新対象
	 * @param entity　　　更新された対象
	 */
    public void update(Object entity) throws RuntimeException{
        this.getCommonDao().update(entity);
    }

    /**
     * 登録対象
     * @param entity    登録された対象
     */
    public boolean save(Object entity)throws RuntimeException {      
        try {
        	 this.getCommonDao().save(entity);
    		return true;
		} catch (RuntimeException e) {
			e.printStackTrace();
			return false;
		}
    }

    /**
     * 登録対象、後再びデータベースからこの対象を読み取ります。
     * @param entity    登録された対象
     */
    public void saveAndRefresh(Object entity)throws RuntimeException {
        this.getCommonDao().saveAndRefresh(entity);
    }

    /**
     * 登録対象集合
     * @param entities  登録された対象集合
     */
    public void saveAll(Collection entities) throws RuntimeException{
        this.getCommonDao().saveAll(entities);
    }

    /**
     * 削除対象
     * @param entity    削除された対象
     */
    public void delete(Object entity) throws RuntimeException{
        this.getCommonDao().delete(entity);
    }

    /**
     * 削除多数対象
     * @param entityClass   　　削除された対象のクラス
     * @param ids 　　　　　　　　　　削除された対象のキーアレイ
     */
    public void deleteSome(Class entityClass, Object[] ids) throws RuntimeException{
        for (int i = 0; i < ids.length; i++) {
            Object obj = this.getCommonDao().load(entityClass, (Serializable) ids[i]);
            if (obj != null) {
                this.getCommonDao().delete(obj);
            }
        }
    }

    /**
     * 削除対象集合
     * @param entities  削除された対象集合
     */
    public void deleteAll(Collection entities) throws RuntimeException{
    	this.getCommonDao().deleteAll(entities);
    }

    /**
     * １つの対象を取ります
     * @param entityClass   対象のクラス
     * @param id            キー
     * @return  対象
     */
    public <T> T loadObject(Class<T> entityClass, Serializable id) {
        return (T)this.getCommonDao().load(entityClass, id);
    }

    /**
     * １つの対象を検索します
     * @param entityClass   対象のクラス
     * @param id            キー
     * @return  対象
     */
    public <T> T selectObject(Class<T> entityClass, Serializable id) {
        return (T)this.getCommonDao().get(entityClass, id);
    }

    /**
     * 指定するクラスの全部対象を取ります
     * @param entityClass クラス
     * @return 対象リスト
     */
    public <T> List<T> selectAll(Class<T> entityClass,String... orderStr) {
		return this.getCommonDao().loadAll(entityClass,orderStr);
}

	/**
     * 検索の文を実行します
     * @param queryString 検索の文
     * @param values        パラメーター
     * @return 対象リスト
     */
    public List selectForSql(String queryString, Object... values) {
        return this.getCommonDao().executeSql(queryString, values);
    }

    /**
     * 空っぽなPageを創立します、そしてdataをpageのdataの中に置きます。
     * @param data 　データー
     * @return page
     */
    public Page putDataToPage(List data){
    	return this.getCommonDao().putDataToPage(data);
    }
}
